package com.walker;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.walker.utils.FileUtils;
import jdk.nashorn.internal.runtime.options.OptionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ReadFileExample {



    public static void main(String[] args) {

        Date date = new Date();
        // 创建SimpleDateFormat对象，指定日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        // 格式化日期
        String formattedDate = sdf.format(date);
        // 输出结果
        System.out.println("Formatted Date: " + formattedDate);

//        Pattern pattern = Pattern.compile("输入字符串");
//        Matcher matcher = pattern.matcher("输入字符串");
//        boolean isMatch = matcher.matches(); // 是否完全匹配
//        System.out.println(isMatch);

//        String dateStr = "2023-05-30";
//        int offset1 = 3;
//        List<String> result = getDateRange(dateStr, offset1);
//        System.out.println( result);


//        String dateStr1 = "2023-05";
//        int offset1 = -3;
//        List<String> result1 = getMonthRange(dateStr1, offset1);
//        System.out.println(result1);

//        String msg = "C:\\Users\\Walker\\Documents\\PTMIS-IMS\\P1\\C11511.29000000.078.fsfs20240125.txt";
//        String result = extractDate(msg);
//        System.out.println(result);

    }

    public static String extractDate(String msg) {
        // 正则表达式匹配8位数字，并且后面不跟其他数字
        String regex = "(\\d{8})(?!\\d)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(msg);

        // 查找匹配的日期
        while (matcher.find()) {
            String dateStr = matcher.group(1);  // 获取匹配的日期
            if (isValidDate(dateStr)) {
                return dateStr;
            }
        }

        // 如果没有匹配到合法日期返回null
        return "No valid date found.";
    }

    // 验证日期是否合法
    private static boolean isValidDate(String dateStr) {
        try {
            // 使用LocalDate.parse来验证日期格式
            LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.BASIC_ISO_DATE);
            return true;  // 如果没有抛出异常，说明日期有效
        } catch (DateTimeParseException e) {
            return false;  // 如果日期无效，抛出异常并返回false
        }
    }



    public static List<String> getDateRange(String dateStr, int offset) {
        List<String> dateList = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 解析传入的日期
        LocalDate date = LocalDate.parse(dateStr, formatter);

        dateList.add(date.format(formatter));


        // 判断偏移量是正数还是负数
        if (offset > 0) {
            // 正数：向后生成日期
            for (int i = 1; i <= offset; i++) {
                dateList.add(date.plusDays(i).format(formatter));
            }
        } else if (offset < 0) {
            // 负数：向前生成日期
            for (int i = -1; i >= offset; i--) {
                dateList.add(date.minusDays(-i).format(formatter));
            }
        }

        return dateList;
    }

    /**
     * 根据传入的日期和偏移量，返回月份列表（包括传入的月份本身）
     *
     * @param dateStr 日期字符串，格式为 "yyyy-MM"
     * @param offset  偏移量，正数表示向后，负数表示向前
     * @return 月份列表
     */
    public static List<String> getMonthRange(String dateStr, int offset) {
        List<String> monthList = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");

        // 解析传入的日期
        LocalDate date = LocalDate.parse(dateStr + "-01"); // 添加日期部分以确保解析成功

        // 包括传入的月份本身
        monthList.add(date.format(formatter));

        // 判断偏移量是正数还是负数
        if (offset > 0) {
            // 正数：向后生成月份
            for (int i = 1; i <= offset; i++) {
                monthList.add(date.plusMonths(i).format(formatter));
            }
        } else if (offset < 0) {
            // 负数：向前生成月份
            for (int i = -1; i >= offset; i--) {
                monthList.add(date.plusMonths(i).format(formatter));
            }
        }

        return monthList;
    }


}
